﻿namespace Digitalmes.Domain.Entities.Mes.Productions;

/// <summary>
/// 产品生产用料（关键物料/批次料）。
/// </summary>
[SugarTable("prod_material_usage")]
public sealed class ProdMaterialUsage : EntityBase
{
    /// <summary>
    /// SN
    /// </summary>
    [NotNull]
    public string? Sn { get; set; }

    /// <summary>
    /// 产线 Id。
    /// </summary>
    public long LineId { get; set; }

    /// <summary>
    /// 产线编号
    /// </summary>
    [NotNull]
    public string? LineCode { get; set; }

    /// <summary>
    /// 工位 Id。
    /// </summary>
    public long WsId { get; set; }

    /// <summary>
    /// 工位编号
    /// </summary>
    [NotNull]
    public string? WsCode { get; set; }

    /// <summary>
    /// 工序 Id，没有则为0。
    /// </summary>
    public long OpId { get; set; }

    /// <summary>
    /// 工序编号，没有则为空。
    /// </summary>
    [NotNull]
    public string? OpCode { get; set; }

    /// <summary>
    /// 上料步序（仅适用关键物料），0 表示没有步序。
    /// </summary>
    public int Step { get; set; }

    /// <summary>
    /// 物料 Id。
    /// </summary>
    public long MaterialId { get; set; }

    /// <summary>
    /// 物料代码。
    /// </summary>
    [NotNull]
    public string? MaterialCode { get; set; }

    /// <summary>
    /// 物料属性（1->关键物料；2->批次料）
    /// </summary>
    public MaterialAttrEnum Attr { get; set; }

    /// <summary>
    /// 关键物料条码。
    /// </summary>
    [NotNull]
    public string? Barcode { get; set; }

    /// <summary>
    /// 上料时间。
    /// </summary>
    /// <remarks>关键物料为上料时间，批次料为过点时间。</remarks>
    public DateTime FeedingTime { get; set; }

    /// <summary>
    /// 是否已解绑（仅适用关键物料）。
    /// </summary>
    /// <remarks>解绑后物料可再次使用</remarks>
    public bool IsUnbound { get; set; }

    /// <summary>
    /// 解绑人
    /// </summary>
    public string? UnboundBy { get; set; }

    /// <summary>
    /// 解绑时间
    /// </summary>
    public DateTime? UnboundTime { get; set; }
}
